import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


//这个注解,就把当前这个servlet类和一个请求的路径关联起来了
//也叫(配置路由),tomcat会在合适的时机自动调用doGet,
//  1)看请求的方法:只有GET请求才能调用doGet,如果是POST会调用doPost,PUT则对应toPUT
//  2)看请求的路径,看url后面那个带有层次结构䣌路径,一个servlet程序可能有多个servelt类,这些servelt类需要在不同情况下执行到,我们希望这个servelt类根hello这个路径相关
//    当我们请求的路径中带有hello的时候,才会执行到我们这个helloservelt的代码,不同的Servlet类就饿可以关联不同的路径
@WebServlet("/hello")
//这里继承HttpServlet,是前面Servlet的jar包提供多个类
//编写Servlet程序一般都要继承这个类
public class HelloServlet extends HttpServlet {

    //重写父类方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //req代表http的请求内容
        //resp代表这次请求要返回的http内容
        //doGet这个方法本质也是一个"回调函数",把这个方法写好之后交给Tomcat
        //Tomcat在收到一个合适的GET请求后就会自动调用doGet,
        //在调用doGet的时候,Tomcat就会解析这一次的HTTP请求,生成一个HttpServletRequest对象(这个对象里面的属性都是和HTTP协议格式匹配的)
        //Tomcat同时会构造出一个空的HttpServletResponse对象,这里的空指的是new好的但是没初始化属性的对象,把这个HttpServletRequest对象也传给doGet里面
        //doGet 要做的事情就是根据这次请求(req),计算出响应(resp)
        //doGet里面的代码,就要根据req里不同的参数细节,生成一个具体的resp对象(往空对象里面设置属性)
        //Tomcat就会根据这个响应对象,转换成符合http协议的响应报文,然后返回给浏览器


        //此时打印在服务器日志中产生(tomcat的日志中)
        System.out.println("hello servlet233");

        //返回"hello servlet2222"给用用户
        //通过getWriter()获取resp对象内部封装的输出流对象,就是字符流(对标字节流)
        //然后用write方法,就可以把一个字符串写到resp对象中(具体就是写到了http响应的body中)
        //浏览器拿到响应中的body就可以显示到界面上
        resp.getWriter().write("hello servlet233");
    }
}
